"""
#!/usr/bin/python3
# coding:utf-8            
#
# Copyright (C) 2024 - 2024 Jasonakeke， Inc. All Rights Reserved 
# @Desc	   ：
# @Time    : 2024/8/25 17:14
# @Author  : Code_By_Jasonakeke
# @Email   : 2284037977@qq.com
# @File    : 01_api.py
# @IDE     : PyCharm
"""
from flask import Flask
from flask_restful import Api, Resource
from flask_restful.inputs import regex, int_range, boolean
from flask_restful.reqparse import RequestParser

app = Flask(__name__)

# 需求：对外提供一个 API 接口，可以访问某个资源，一共有三个步骤
# 步骤一：创建 restful 的 API
api = Api(app)


# 步骤二：定义资源
class HelloResource(Resource):
	# 定义各种操作（函数）
	def get(self):
		return {'hello': 'world'}

	def put(self):
		return {'put': 'world'}

	def post(self):
		# 创建请求参数校验对象
		rq = RequestParser()
		# 定义参数的校验声明
		# 如果定义 help， 那么所有的校验都是一个错误提示
		rq.add_argument('a', type = int, required = True, help = '参数 a 错误', location = 'args')
		rq.add_argument('b', type = str, required = True, location = 'args')
		rq.add_argument("c", type = str, choices = ['男', '女'], location = 'args')
		# 只允许两位数的整数
		rq.add_argument("d", type = regex('^d{2}$'), location = 'args')
		# 只允许指定范围的整数，包括1也包括100
		rq.add_argument('e', type = int_range(1, 100), location = 'args')
		# 只允许 boolean
		rq.add_argument('f', type = boolean, location = 'form')
		# 启动校验
		req = rq.parse_args()
		# 校验完成之后得到参数的值
		a = req.a
		b = req.b
		return {'post': 'world', 'a': a, 'b': b, 'c': req.c, 'd': req.d, 'e': req.e, 'f': req.f}


# 步骤三，把资源加载到 api 中才能对外发布
api.add_resource(HelloResource, '/hello')

# app.run 可以省略
if __name__ == '__main__':
	app.run(debug = True)
